package org.fly4j.part1.helper;

import org.fly4j.part1.annotation.Controller;
import org.fly4j.part1.annotation.Service;
import org.fly4j.part1.utils.ClassUtils;

import java.util.HashSet;
import java.util.Set;

/**
 * Created by 37284 on 2016/1/2.
 *
 * 类操作助手类
 */
public class ClassHelper {
    /**
     * 集合  存放所有的类
     */
    private static  final Set<Class<?>> CLASS_SET;
    static {
        String basePackage = ConfigHelper.getAppBasePackage();
        CLASS_SET = ClassUtils.loadClassSet(basePackage);
    }

    /**
     * 获取所有的类
     * @return
     */
    public static Set<Class<?>> getClassSet(){
        return CLASS_SET;
    }

    /**
     * 获取所有标注 @Service 的类
     */
    public static Set<Class<?>> getServiceClassSet(){
        Set<Class<?>> cls = new HashSet<>();
        for(Class<?> cl : CLASS_SET){
            if(cl.isAnnotationPresent(Service.class)){
                cls.add(cl);
            }
        }
        return cls;
    }

    /**
     * 获取所有标注 @Controller 的类
     */
    public static Set<Class<?>> getControllerClassSet(){
        Set<Class<?>> cls = new HashSet<>();
        for(Class<?> cl : CLASS_SET){
            if(cl.isAnnotationPresent(Controller.class)){
                cls.add(cl);
            }
        }
        return cls;
    }

    /**
     * 获取所有标注 的类
     */
    public static Set<Class<?>> getBeanClassSet(){
        Set<Class<?>> cls = new HashSet<>();
        cls.addAll(getControllerClassSet());
        cls.addAll(getServiceClassSet());
        return cls;
    }

}
